package cn.edu.lingnan;

import cn.edu.lingnan.bean.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

@SpringBootTest
public class RedisTemplateTestDemo {

    //StringRedisTemplate 是 Spring Data Redis 对 jedis API 的高度封装
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    //
    @Resource
    private RedisTemplate<String,Object> redisTemplate;
    /**
     * 两者区别：
     *  StringRedisTemplate 使用的 JdkSerializatonRedisSerializer 序列化
     *  其存储数据会先序列化成字节数组然后再存出redis中
     *
     *  StringRedisTemplate 使用 StringRedisSerializer
     *  当redis中存储的是在字符串数据就实现String
     *  复杂结构的对象类型数据，使用redisTemplate
     */

    @Test
     public void stringTemplateTest(){

        // //设置 指定的键 key值过期时间
        //stringRedisTemplate.expire("class1902",12, TimeUnit.SECONDS);
        // // stringRedisTemplate.delete("class1902");  //删除指定的键
        // // stringTemplate.hasKey("class1902");  //判断键是否存在
        //Long res01 = stringRedisTemplate.getExpire("class1902");//获取过期时间
        //Long res02 = stringRedisTemplate.getExpire("class1902",TimeUnit.SECONDS); //获取指定格式过期时间
        //System.out.println(res01+"  ===获取过期时间");
        //System.out.println(res02+"  ===获取指定格式过期时间");
        //
        //stringTemplate.rename("class1902","newClass1902");   //key,以旧换新
       // stringTemplate.rename("cl02","newClass1902");   //key,以旧换新

        //key,以旧换新 返回值为boolean
        //stringRedisTemplate.renameIfAbsent("class1903","newClass1903");
        //stringRedisTemplate.type("newClass1902");    //获取指定key的类型
        ////将指定的键 移动到指定的库中
        //stringRedisTemplate.move("newClass1902",3);
        //stringRedisTemplate.randomKey();    //随机获取一个key
        //stringRedisTemplate.persist("newClass1902");    //持久化操作，将key 设置为永不过期
        //System.out.println(stringRedisTemplate);
        //stringRedisTemplate.opsForValue().set("xiaochen","wozuishai",4,TimeUnit.SECONDS);
        //stringRedisTemplate.opsForValue().set();

        //Map<String,String> map = new HashMap<>();
        //map.put("k1","v1123");
        //map.put("k2","v2123");
        //map.put("k3","v3123");
        //map.put("k4","我最帅");
        //
        //stringRedisTemplate.opsForValue().multiSet(map);




        //使用StringRedisTemplate存储对象
       // stringRedisTemplate.opsForValue().set("user", String.valueOf(new User()));


        redisTemplate.opsForValue().set("user",new User(1,"小陈","123456","10085","2022-1-7"));






     }


}
